home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
codeit.zip
/
ENCODEIT.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1991-03-29
|
3KB
|
137 lines
Program Encode;
Const
MaxBuf = 30000;
Var
Password : String[6];
seed1, seed2 : Byte;
source, dest : File;
buffer : Array [1..MaxBuf] of Byte;
BytesRead : Real;
i : Integer;
(********************************************************************)
Procedure OpenFiles;
Const
s : Array [1..6] Of Char = ('L','O','C','K','E','D');
Begin
Assign(source,ParamStr(1));
(*$I-*)
If IOResult <> 0 Then
Begin
Writeln('File not found.');
Halt;
End;
BlockRead(source,buffer,6);
If ((buffer[1] = ord('L')) And
(buffer[2] = ord('O')) And
(buffer[3] = ord('C')) And
(buffer[4] = ord('K')) And
(buffer[5] = ord('E')) And
(buffer[6] = ord('D'))) Then
Begin
Writeln('File is already locked.');
Halt;
End;
Reset(source,1);
Assign(dest,'$$$$$.$$');
Rewrite(dest,1);
BlockWrite(dest,s,6);
BlockWrite(dest,seed1,1);
BlockWrite(dest,seed2,1);
End;
(****************************************************************)
Procedure GetSeed;
Var
i, j : Integer;
Begin
Seed1 := 0;
Seed2 := 0;
Password := ParamStr(2);
j := Length(Password);
For i:= 1 to Length(Password) Do
Begin
Seed1 := Seed1 + (Ord(Password[i]) * i);
Seed2 := Seed2 + (Ord(Password[i]) * i);
j := j - 1;
End;
End;
(*****************************************************************)
Procedure EncodeFiles;
Var
i1, i2 : Byte;
rr : Integer;
Begin
i1 := Seed1;
i2 := Seed2;
BytesRead := 0;
BlockRead(source, buffer, MaxBuf, rr);
BytesRead := BytesRead + rr;
While rr > 0 Do
Begin
For i := 1 to rr Do
Begin
i1 := i1 - i;
i2 := i2 +i;
If odd(i) Then
buffer[i] := buffer[i] - i1
Else
buffer[i] := buffer[i] + i2;
End;
BlockWrite(dest, buffer, rr);
BlockRead(source, buffer, MaxBuf, rr);
BytesRead := BytesRead + rr;
End;
End;
(*******************************************************************)
Procedure CloseFiles;
Var
i : Integer;
Begin
Rewrite(source, 1);
FillChar(buffer, MaxBuf, 0);
While BytesRead > 0 Do
Begin
If BytesRead > MaxBuf Then
BlockWrite(source, buffer, MaxBuf)
Else
Begin
i := Trunc(BytesRead);
BlockWrite(source, buffer, i);
End;
BytesRead := BytesRead - MaxBuf;
End;
Close(source);
Close(dest);
Erase(source);
Rename(dest, ParamStr(1));
End;
(***************************************************************)
Begin
If Paramcount <> 2 Then
Begin
Writeln('Syntax: ENCODEIT Filename password');
Halt;
End;
Getseed;
OpenFiles;
EncodeFiles;
CloseFiles;
End.